﻿using System;
using CoopSaude.SCEMReference;

namespace CoopSaude.DAO
{
    /* Vinícius */
    public class ScemDAO
    {
        private static SCEMClient ws;

        /*implementação do singleton*/
        public static SCEMClient Websservice
        {
            get
            {
                if (ws == null)
                {
                    try
                    {
                        ws = new SCEMClient();
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                }
                return ws;
            }
        }

        /*reseta objeto*/
        public static void ResetWS()
        {
            ws = null;
        }

        #region produtos
        public static ProdutoDTO[] listarProdutos(int pagina, int totalPorPagina, bool listarDesativados) {
            try
            {
                return Websservice.GetProdutos(pagina, totalPorPagina, listarDesativados);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static ProdutoDTO obterProduto(string idProduto)
        {
            try
            {
                return Websservice.GetProduto(idProduto);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static ProdutoDTO adicionarProduto(ProdutoDTO produto)
        {
            try {
                return Websservice.SaveProduto(produto);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static ProdutoDTO atualizarProduto(ProdutoDTO produto)
        {
            try
            {
                return Websservice.UpdateProduto(produto);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static bool desativarProduto(string produtoId)
        {
            try
            {
                return Websservice.DisableProduto(produtoId);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static TipoProdutoDTO[] listarTiposDeProduto()
        {
            try
            {
                return Websservice.ListarTiposProdutos();
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static OrdemCompraProdutoDTO criarOrdemCompra(OrdemCompraProdutoDTO ordem)
        {
            try
            {
                ordem = Websservice.CreateOrdemCompraProduto(ordem);
                if (Websservice.UpdateOrdemCompraProdutoStatus(ordem.Id, StatusOrdemCompra.FINALIZADO))
                    return ordem;
                else
                    return null;
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }
        #endregion

        #region Fornecedores
        public static FornecedorDTO[] listarFornecedores(int pagina, int totalPorPagina, bool listarDesativados) {
            try
            {
                return Websservice.GetFornecedores(pagina, totalPorPagina, listarDesativados);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static FornecedorDTO obterFornecedor(string idFornecedor)
        {
            try
            {
                return Websservice.GetFornecedor(idFornecedor);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static FornecedorDTO adicionarFornecedor(FornecedorDTO fornecedor)
        {
            try {
                return Websservice.SaveFornecedor(fornecedor);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static FornecedorDTO atualizarFornecedor(FornecedorDTO fornecedor)
        {
            try
            {
                return Websservice.UpdateFornecedor(fornecedor);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static bool desativarFornecedor(string fornecedorId)
        {
            try
            {
                return Websservice.DisableFornecedor(fornecedorId);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        #endregion

		#region condicao de venda
        public static CondicaoVendaDTO salvarCondicaoDeVenda(CondicaoVendaDTO condicao)
        {
            try
            {
                return Websservice.SaveCondicaoVenda(condicao);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static CondicaoVendaDTO[] listarCondicaoDeVenda(String idProduto)
        {
            try
            {
                return Websservice.GetAllCondicoesVenda(idProduto);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static bool removerCondicao(String idProduto, String idFornecedor)
        {
            try
            {
                return Websservice.DeleteCondicaoVenda(idProduto, idFornecedor);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }
        #endregion
		
        #region Equipamentos

        public static EquipamentoDTO[] listarEquipamentos(int pagina, int totalPorPagina, bool listarDesativados)
        {
            try
            {
                return Websservice.GetEquipamentos(pagina, totalPorPagina, listarDesativados);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static EquipamentoDTO obterEquipamento(string idEquipamento)
        {
            try
            {
                return Websservice.GetEquipamento(idEquipamento);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static EquipamentoDTO adicionarEquipamento(EquipamentoDTO equipamento)
        {
            try
            {
                return Websservice.SaveEquipamento(equipamento);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static EquipamentoDTO atualizarEquipamento(EquipamentoDTO equipamento)
        {
            try
            {
                return Websservice.UpdateEquipamento(equipamento);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static bool desativarEquipamento(string equipamentoId)
        {
            try
            {
                return Websservice.DisableEquipamento(equipamentoId);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static TipoFisioterapiaDTO[] listarFisioterapia()
        {
            try
            {
                return Websservice.ListarTiposFisioterapia();
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }
        #endregion

    }
}